import jsonpath

from Common.my_logger import logger
from Common.handle_data import EnvData


# 将提取表达式转换成字典
def __pre_case_dat__(case_data):
    if case_data is not None and isinstance(case_data, str):
        return eval(case_data)
    else:
        return case_data


def __pre_extract_data__(extract_data):
    if extract_data is not None and isinstance(extract_data, str):
        return eval(extract_data)
    else:
        return extract_data


# 根据相应结果当中提取表达式，并设置为环境变量
def extract_data(case_data, extract_data):
    """
    :param case_data: 从excel当中读取出来的提取表达式
    :param extract_data: HTTP请求相应结果
    """
    global key, res
    case_data = __pre_case_dat__(case_data)
    extract_data = __pre_extract_data__(extract_data)

    # 遍历字典
    for key, value in case_data.items():
        # 提取
        res = ''.join(jsonpath.jsonpath(extract_data, value))
        logger.info('提前需要参数化的数据：{}'.format(res))

    # 设置环境变量
    setattr(EnvData, key, res)


if __name__ == '__main__':
    data2 = '{"token":"$..token"}'
    data3 = "{'code': 200, 'msg': 'ok', 'result': {'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpX'}}"

    extract_data(data2, data3)
    print(EnvData.__dict__)
